home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Wonky Flux Batch 2019 02
/
Wonky_Flux_Batch_2019-02.zip
/
Wonky Flux Batch 2019-02
/
021 - HO Utilities - Clock Utility System.dsk
/
BASIC.INTERRUPT.bas
< prev
next >
Wrap
BASIC Source File
|
2019-02-16
|
2KB
|
55 lines
1990 REM BASIC INTERRUPT ROUTINE BY WILLIAM P. GOODWILL
2000 TEXT : HOME : INPUT "WHAT SLOT IS THE TIMEMASTER IN? ";SLOT: IF SLOT <1 OR SLOT >7 THEN 2000
2010 REM **LOAD 3 SMALL ASSY LANGUAGE ROUTINES**
2020 REM **;COME HERE UPON INTERRUPT
2030 REM **768 LDA #01 ;SET FLAG FOR BASIC
2040 REM ** STA 779
2050 REM ** LDA PIA ;CLEAR PIA
2060 REM ** LDA $45 ;RESTORE ACCUMULATOR
2070 REM ** RTI ;THEN RETURN
2080 REM **779 BYTE 00 ;BASIC FLAG
2090 REM **;USE "CALL 780" TO DISABLE INTERRUPTS
2100 REM **780 SEI
2110 REM ** RTS
2120 REM **;USE "CALL 782" TO ENABLE INTERRUPTS
2130 REM **782 CLI
2140 REM ** RTS
2150 DATA 169,1,141,11,3,173,208,192,165,69,64,0,120,96,88,96
2160 FOR A = 768 TO 783: READ X: POKE A,X: NEXT A
2170 CALL 780: REM TURN OFF INTERRUPTS
2180 POKE 1022,0: POKE 1023,3: REM POINT TO INTERRUPT HANDLER
2190 A = -16256 +16 *SLOT: REM PIA BASE ADDRESS = $C080+$N0
2210 POKE 774,128 +SLOT *16
2220 POKE A +1,0: POKE A +3,0: REM DATA DIRECTION REGS
2240 POKE A,0: REM PORT A INPUT,8 BITS
2250 POKE A +2,255: REM PORT B OUTPUT,8 BITS
2260 REM THE NEXT 2 POKES DETERMINE INTERRUPT RATE
2270 REM (THIS BASIC PROGRAM IS TOO SLOW FOR 1024 HZ INTERRUPTS)
2280 POKE A +1,12: REM CONTROL REGISTER A (1 PER SECOND)
2290 POKE A +3,4: REM CONTROL REGISTER B
2300 POKE A +2,47: REM TELL PIA TO PASS INTERRUPTS
2310 X = PEEK(A): REM CLEAR PIA FLAGS
2320 F = 779: REM BASIC FLAG ADDRESS
2330 Z = 0: REM FLAG VALUE WHEN CLEAR
2340 CALL 782: REM ENABLE INTERRUPTS
2350 T = 3: REM NUMBER OF INTERRUPTS PER CYCLE
2360 ONERR GOTO 2380
2370 GOTO 2460: REM INIT
2380 CALL 780: STOP : REM DISABLE INTERRUPTS BEFORE HALTING
2390 REM *******************
2400 IF PEEK(F) = Z THEN PRINT ".";: GOTO 2400: REM WAIT FOR INTERRUPT
2410 PRINT "/";: REM DO THE FOLLOWING ON EVERY INTERRUPT
2420 POKE F,Z: REM RESTORE FLAG AFTER INTERRUPT
2430 C = C +1: IF C <T THEN GOTO 2400: REM INCR CTR,COMPARE TO MAX
2450 REM PERFORM THIS OPERATION WHENEVER COUNT REACHES MAX COUNT T
2460 C = 0: REM INIT COUNTER
2470 PRINT
2485 D$ = CHR$(4): PRINT
2490 PRINT D$"IN#"SLOT: PRINT D$"PR#"SLOT
2500 VTAB 5: INPUT ":";K$
2510 PRINT D$"IN#0": PRINT D$"PR#0"
2520 PRINT K$
2530 CALL -958
2540 POKE A +1,12: REM CONTROL REGISTER A (1 PER SECOND)
2550 POKE A +3,4: REM CONTROL REGISTER B
2560 GOTO 2400